package main

import (
	"encoding/binary"
	"log"
	"poker/pb/proto/login"
	"time"

	"github.com/golang/protobuf/proto"
	"github.com/gorilla/websocket"
)

func main() {
	// WebSocket 服务端地址
	url := "ws://localhost:3000/?token=yourtoken&uid=testuid"
	conn, _, err := websocket.DefaultDialer.Dial(url, nil)
	if err != nil {
		log.Fatal("连接失败:", err)
	}
	defer conn.Close()

	// 构造 Protobuf 消息（以 Ping 为例）
	ping := &login.LoginReq{
		Token:    "yourtoken",
		Platform: "wx",
	}

	// 序列化为二进制
	pbData, err := proto.Marshal(ping)
	if err != nil {
		log.Fatal("Protobuf 序列化失败:", err)
	}

	// 构造头部，第一字节标志位：0x02 表示 Protobuf
	header := make([]byte, 17)
	header[0] = 0x02                              // 第 1 字节：消息类型标志位（0x02 表示 Protobuf）
	binary.BigEndian.PutUint16(header[1:3], 2001) // 第 2-3 字节：路由 ID（示例值 1001）

	// 拼接头部和消息体
	sendData := append(header, pbData...)

	// 发送消息
	err = conn.WriteMessage(websocket.BinaryMessage, sendData)
	if err != nil {
		log.Fatal("发送失败:", err)
	}

	header[0] = 0x01                              // 第 1 字节：消息类型标志位（0x01 表示 JSON）
	binary.BigEndian.PutUint16(header[1:3], 2001) // 第 2-3 字节：路由 ID（示例值 1001）
	sendData = append(header, []byte(`{"token":"yourtoken","platform":"wx"}`)...)
	// 发送消息
	err = conn.WriteMessage(websocket.BinaryMessage, sendData)
	if err != nil {
		log.Fatal("发送失败:", err)
	}

	// 可选：接收服务端响应
	_, resp, err := conn.ReadMessage()
	if err != nil {
		log.Println("读取响应失败:", err)
	} else {
		// 解析响应数据
		// Protobuf 响应
		var data login.LoginRes // 假设服务端返回 Pong 消息
		if err := proto.Unmarshal(resp[0:], &data); err != nil {
			log.Println("Protobuf 解析失败:", err)
		} else {
			log.Printf("Protobuf 响应: %+v\n", data)
		}
	}

	time.Sleep(time.Second)
}
